package mysql8学习.高级.第15章_锁;

/**
 * ① 表级别的S锁、X锁
 * 在对某个表执行SELECT. INSERT. DELETE、 UPDATE语句时 ，
 * InnoDB存储引擎是不会为这个表添加表级别的S锁或者X锁的。
 * 在对某个表执行一些诸如ALTER TABLE、 DROP TABLE 这类的DDL语句时，
 * 其他事务对这个表并发执行诸如SELECT、INSERT、DELETE、 UPDATE的语句会发生阻塞。
 * 同理，某个事务中对某个表执行SELECT、INSERT、DELETE、UPDATE语句时，
 * 在其他会话中对这个表执行DDL语句也会发生阻塞。
 * 这个过程其实是通过在server层使用一种称之为元数据锁(英文名: Metadata Locks, 简称MDL)结构来实现的。
 * 一般情况下，不会使用Inno
 * B存储引擎提供的表级别的S锁和X锁。
 * 只会在一些特殊情况下， 比方说崩溃恢复过程中用到。
 * 比如，在系统变量autocommit=0. innodb_table_locks = 1 时，
 * 手动获取InnoDB存储引擎提供的表t 的S锁或者X锁可以这么写:
 *  ●LOCK TABLES t READ : InnoDB存储引摩会对表t加表级别的S锁。
 *  ●LOCK TABLES t WRITE : InnoDB存储引擎会对表t加表级别的X锁。
 *  不过尽量避免在使用InnoDB存储引擎的表上使用LOCK TABLES 这样的手动锁表语句，
 *  它们并不会提供什么额外的保护，只是会降低并发能力而已。
 *  InnoDB的厉害之处还是实现了更细粒度的行锁，
 *  关于InnoDB表级别的S锁和X锁大家了解一下就可以了。
 *
 * SHOW OPEN TABLES;//查看锁
 * show open tables where in_use>0;//>0表示有锁使用
 * lock tables 表名 write/read;//创造一个表的 写/读锁
 *
 * unlock tables;//释放锁
 *
 *  MySQL的表级锁有两种模式: (以MyISAM表进行操作的演标)
 * ●表共享读锁(Table Read Lock)
 * ●表独占写锁(Table Write Lock)
 * 锁类型  自己可读    自己可写    自己可操作其他表    他人可读    他人可写
 * 读锁       是       否            否              是      否,等
 * 写锁       是       是           否            否，等       否，等
 *
 *
 */
public class C_B1_1_表级别的S锁和X锁 {
}
